iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0
Software Development

你知道Go是什麼嗎?系列 第 7

Day7 - Pointer - Golang

  • 分享至 

  • xImage
  •  

流程控制之前先進指標,有學過程式的應該都知道,指標有點麻煩而且難學,要去理解記憶體位置與數值之間的關係,當指標來回指來指去時就會很亂又很難除錯

圖源:https://memes.tw/wtf/415072#!

指標

在電腦科學中,指標(英語:Pointer),是程式語言中的一類資料類型及其物件或變數,用來表示或儲存一個記憶體位址。而此位址的值直接指向(points to)存在該位址的物件的值。

為什麼要使用指標?

Go 是一個 pass by value 的程式語言,也就是每當我們把值放入函式中時,Go 會把這個值完整的複製一份,並放到新的記憶體位址,不會對原本的值做變更

對pass by value不大了解的可以看一下這篇文章的介紹

指標宣告

var ptr *int //宣告一個指向int的指標變數ptr
fmt.Printf("%p \n", ptr) // 0x0 尚未賦值

if ptr == nil {
	fmt.Println("ptr is nil") //ptr is nil
}

未指派記憶體位置時為nil,指派後即為記憶體位置。nil在概念上和其它语言的null、None、NULL一样,都指零值或空值。

score := 75
var ptr *int //宣告一個指向int的指標變數ptr
ptr = &score
fmt.Println(score) 	// 75
fmt.Println(&score)	// 0xc000122058
fmt.Println(ptr) 	  // 0xc000122058
fmt.Println(*ptr) 	// 75
  • 取址符號 & 可以對變數取得記憶體位置,
  • 取值符號 * 可對記憶體位置獲取存放的數值。

想寫一個加法的程式,不使用指標時就必須使用return的方式更改原變數的值,如下

func plus10(a int) int{
    return a+10
}

func main() {
    score := 75
    score = plus10(score) // plus10傳回新值並並賦予score
    fmt.Println(score) //85
}

若使用指標寫法,就可直接變更傳入參數之值。

func plus_10(a *int) {
    *a = *a + 10
}

func main() {
    score := 75
    plus_10(&score)
    fmt.Println(score) //85
}

由於沒有到很熟,指標不確定要介紹多少東西,就先到這邊就好,可以看一下其他前輩是如何介紹指標的,還有指標的各種相關功能。

參考資料

[Golang] 程式設計教學:使用指標 (Pointer)
https://opensourcedoc.com/golang-programming/pointer/

[Golang] 指標 Pointers
https://pjchender.dev/golang/pointers/

#10 指標 Pointer | Golang魔法使
https://ithelp.ithome.com.tw/articles/10235479


上一篇
Day6 - 結構與方法 - Golang
下一篇
Day8 - 常見結構 - Golang
系列文
你知道Go是什麼嗎?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言